﻿package frEngine.core
{
    import __AS3__.vec.*;
    import baseEngine.utils.*;
    import flash.geom.*;
    import frEngine.animateControler.*;
    import frEngine.math.*;
    import frEngine.shader.filters.*;

    public class SwordLightSurface extends FrSurface3D
    {
        private var splitNum:int = 10;
        public var totalNumLine:int = 0;
        public var totalTriangle:Number = 0;
        public var actionTotalFrames:int = 0;
        private static const _matrix3d:Matrix3D = new Matrix3D();

        public function SwordLightSurface(param1:String, param2:Vector.<Matrix3D>, param3:int, param4:int, param5:int, param6:Vector3D)
        {
            super(param1);
            this.splitNum = param5;
            this.init(param2, param3, param4, param6);
            return;
        }// end function

        private function init(param1:Vector.<Matrix3D>, param2:int, param3:int, param4:Vector3D) : void
        {
            this.actionTotalFrames = param1.length;
            this.totalNumLine = (this.actionTotalFrames - 1) * this.splitNum;
            this.totalTriangle = (this.totalNumLine - 1) * 2;
            var _loc_5:* = new Vector3D(0, param2 / 2 + param3, 0);
            var _loc_6:* = new Vector3D(0, (-param2) / 2 + param3, 0);
            Matrix3DUtils.setOrientation(_matrix3d, param4);
            var _loc_7:* = Md5SkinAnimateControler.defaultOffsetMatrix3d;
            _matrix3d.prepend(_loc_7);
            _loc_5 = _matrix3d.transformVector(_loc_5);
            _loc_6 = _matrix3d.transformVector(_loc_6);
            var _loc_8:* = addVertexData(FilterName_ID.POSITION_ID, 3, true, null);
            var _loc_9:* = _loc_8.vertexVector;
            this.createPointList(param1, _loc_5, _loc_9);
            this.createPointList(param1, _loc_6, _loc_9);
            this.createUV();
            this.createTriangleIndex();
            this.indexBufferFr.numTriangles = 0;
            return;
        }// end function

        private function createPointList(param1:Vector.<Matrix3D>, param2:Vector3D, param3:Vector.<Number>) : void
        {
            var _loc_13:Quaternion = null;
            var _loc_14:Vector3D = null;
            var _loc_15:Vector3D = null;
            var _loc_25:Vector3D = null;
            var _loc_26:Vector3D = null;
            var _loc_27:Vector3D = null;
            var _loc_28:Number = NaN;
            var _loc_29:Number = NaN;
            var _loc_30:Number = NaN;
            var _loc_31:Vector3D = null;
            var _loc_32:Vector3D = null;
            var _loc_33:Vector3D = null;
            var _loc_34:Number = NaN;
            var _loc_35:Vector3D = null;
            var _loc_36:Vector3D = null;
            var _loc_37:Number = NaN;
            var _loc_38:Number = NaN;
            var _loc_39:Number = NaN;
            var _loc_40:Number = NaN;
            var _loc_41:Number = NaN;
            var _loc_42:Number = NaN;
            var _loc_43:Number = NaN;
            var _loc_44:Number = NaN;
            var _loc_45:Number = NaN;
            var _loc_46:Number = NaN;
            var _loc_47:Number = NaN;
            var _loc_48:Number = NaN;
            var _loc_49:Number = NaN;
            var _loc_50:int = 0;
            var _loc_51:Number = NaN;
            var _loc_52:Number = NaN;
            var _loc_53:Number = NaN;
            var _loc_54:Number = NaN;
            var _loc_55:Number = NaN;
            var _loc_56:Number = NaN;
            var _loc_57:Number = NaN;
            var _loc_58:Number = NaN;
            var _loc_59:Number = NaN;
            var _loc_60:Number = NaN;
            var _loc_61:Number = NaN;
            var _loc_4:Number = 2;
            var _loc_5:* = param1.length;
            var _loc_6:* = new Vector.<Vector3D>;
            var _loc_7:* = new Vector3D();
            var _loc_8:* = param1[0];
            var _loc_9:* = _loc_8.transformVector(param2);
            _loc_6.push(_loc_9);
            _loc_8 = param1[1];
            var _loc_10:* = _loc_8.transformVector(param2);
            _loc_6.push(_loc_10);
            var _loc_11:* = new Vector.<Vector3D>;
            var _loc_12:* = new Vector.<Number>;
            var _loc_16:* = new Vector3D();
            var _loc_17:int = 2;
            while (_loc_17 < _loc_5)
            {
                
                _loc_8 = param1[_loc_17];
                _loc_25 = _loc_8.transformVector(param2);
                _loc_6.push(_loc_25);
                _loc_26 = _loc_9.subtract(_loc_10);
                _loc_27 = _loc_25.subtract(_loc_10);
                _loc_28 = _loc_26.normalize();
                _loc_29 = _loc_27.normalize();
                _loc_30 = 0.5 - _loc_28 / (_loc_28 + _loc_29);
                _loc_31 = _loc_26.add(_loc_27);
                _loc_32 = _loc_26.crossProduct(_loc_27);
                _loc_32.normalize();
                _loc_31.normalize();
                _loc_33 = _loc_31.crossProduct(_loc_32);
                _loc_34 = _loc_26.dotProduct(_loc_27);
                _loc_34 = 1 - Math.acos(_loc_34) / Math.PI;
                _loc_31.scaleBy(_loc_30 * _loc_34 * _loc_34 * 10);
                _loc_33 = _loc_33.add(_loc_31);
                _loc_33.normalize();
                _loc_33.w = _loc_28;
                _loc_11.push(_loc_33);
                _loc_9 = _loc_10;
                _loc_10 = _loc_25;
                _loc_17++;
            }
            _loc_25 = _loc_6[0];
            _loc_33 = _loc_9.subtract(_loc_25);
            _loc_28 = _loc_33.normalize();
            _loc_33.w = _loc_28;
            _loc_11.push(_loc_33);
            _loc_9 = _loc_10;
            _loc_10 = _loc_25;
            _loc_25 = _loc_6[1];
            _loc_33 = _loc_25.subtract(_loc_9);
            _loc_28 = _loc_33.normalize();
            _loc_33.w = _loc_28;
            _loc_11.unshift(_loc_33);
            var _loc_18:* = _loc_11[0];
            var _loc_19:* = _loc_6[0];
            var _loc_20:* = new Vector3D();
            _loc_17 = 1;
            while (_loc_17 < _loc_5)
            {
                
                _loc_35 = _loc_11[_loc_17];
                _loc_36 = _loc_6[_loc_17];
                _loc_28 = _loc_35.w;
                _loc_37 = Math.acos(_loc_35.dotProduct(_loc_18)) / Math.PI;
                _loc_28 = _loc_28 * (_loc_37 * _loc_37 * 0.37 + 0.31);
                _loc_12.push(_loc_19.x - _loc_18.x * _loc_28, _loc_19.y - _loc_18.y * _loc_28, _loc_19.z - _loc_18.z * _loc_28);
                _loc_12.push(_loc_36.x + _loc_35.x * _loc_28, _loc_36.y + _loc_35.y * _loc_28, _loc_36.z + _loc_35.z * _loc_28);
                _loc_18 = _loc_35;
                _loc_19 = _loc_36;
                _loc_17++;
            }
            _loc_35 = _loc_11[0];
            _loc_36 = _loc_6[0];
            _loc_28 = _loc_35.w;
            _loc_12.push(_loc_19.x - _loc_18.x * _loc_28, _loc_19.y - _loc_18.y * _loc_28, _loc_19.z - _loc_18.z * _loc_28);
            _loc_12.push(_loc_36.x + _loc_35.x * _loc_28, _loc_36.y + _loc_35.y * _loc_28, _loc_36.z + _loc_35.z * _loc_28);
            var _loc_21:* = _loc_6[0];
            var _loc_22:* = new Vector3D();
            var _loc_23:int = 0;
            var _loc_24:* = _loc_5 - 1;
            _loc_17 = 0;
            while (_loc_17 < _loc_24)
            {
                
                _loc_22 = _loc_6[(_loc_17 + 1)];
                _loc_38 = _loc_12[_loc_23++];
                _loc_39 = _loc_12[_loc_23++];
                _loc_40 = _loc_12[_loc_23++];
                _loc_41 = _loc_12[_loc_23++];
                _loc_42 = _loc_12[_loc_23++];
                _loc_43 = _loc_12[_loc_23++];
                _loc_44 = _loc_21.x;
                _loc_45 = _loc_21.y;
                _loc_46 = _loc_21.z;
                _loc_47 = _loc_22.x;
                _loc_48 = _loc_22.y;
                _loc_49 = _loc_22.z;
                _loc_50 = 0;
                while (_loc_50 < this.splitNum)
                {
                    
                    _loc_51 = _loc_50 / this.splitNum;
                    _loc_52 = _loc_51 * _loc_51;
                    _loc_53 = _loc_52 * _loc_51;
                    _loc_54 = 1 - _loc_51;
                    _loc_55 = _loc_54 * _loc_54;
                    _loc_56 = _loc_55 * _loc_54;
                    _loc_57 = 3 * _loc_51 * _loc_55;
                    _loc_58 = 3 * _loc_52 * _loc_54;
                    _loc_59 = _loc_44 * _loc_56 + _loc_38 * _loc_57 + _loc_41 * _loc_58 + _loc_47 * _loc_53;
                    _loc_60 = _loc_45 * _loc_56 + _loc_39 * _loc_57 + _loc_42 * _loc_58 + _loc_48 * _loc_53;
                    _loc_61 = _loc_46 * _loc_56 + _loc_40 * _loc_57 + _loc_43 * _loc_58 + _loc_49 * _loc_53;
                    param3.push(_loc_59, _loc_60, _loc_61);
                    _loc_50++;
                }
                _loc_21 = _loc_22;
                _loc_17++;
            }
            return;
        }// end function

        private function createUV() : void
        {
            var _loc_3:Number = NaN;
            var _loc_1:* = new Vector.<Number>;
            var _loc_2:* = 1 / this.totalNumLine;
            var _loc_4:int = 0;
            while (_loc_4 < this.totalNumLine)
            {
                
                _loc_3 = _loc_4 * _loc_2;
                _loc_1.push(_loc_3, 1);
                _loc_4++;
            }
            _loc_4 = 0;
            while (_loc_4 < this.totalNumLine)
            {
                
                _loc_3 = _loc_4 * _loc_2;
                _loc_1.push(_loc_3, 0);
                _loc_4++;
            }
            var _loc_5:* = addVertexData(FilterName_ID.UV_ID, 2, true, null);
            _loc_5.vertexVector = _loc_1;
            return;
        }// end function

        private function createTriangleIndex() : void
        {
            var _loc_3:int = 0;
            var _loc_4:int = 0;
            var _loc_1:* = this.totalNumLine - 1;
            var _loc_2:* = new Vector.<uint>;
            _loc_3 = 0;
            while (_loc_3 < _loc_1)
            {
                
                _loc_4 = _loc_3 + this.totalNumLine;
                _loc_2.push(_loc_3);
                _loc_2.push((_loc_3 + 1));
                _loc_2.push(_loc_4);
                _loc_2.push((_loc_3 + 1));
                _loc_2.push((_loc_4 + 1));
                _loc_2.push(_loc_4);
                _loc_3++;
            }
            indexBufferFr.indexVector = _loc_2;
            return;
        }// end function

    }
}
